iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
DevOps

搞定Docker網路系列 第 10

Docker的網路-Docker Compose yaml的寫法(external與internal篇)

  • 分享至 

  • xImage
  •  

雖然今天加班比較晚,還是要比照鐵人精神,完成今天的挑戰...

Docker Compose yaml的起手式,我想從編輯器開始。

不是為了混一篇文章的量XD而是實際撰寫上,常常因為yaml的層級跟空白,而發生無法正常運作的問題。

這邊推薦使用vs code的docker extension,就可以提供Dockerfile還有Docker compose yaml的一些語法輔助。

有關Docker Compose yaml比較完整的說明,可以看以下官方文件:

https://docs.docker.com/compose/compose-file/06-networks/

網路的元件宣告還算簡單

version: "3"
services:
  ubuntu:
    image: tedyang/ubuntu:1120912
    networks:
      - outside
networks:
  outside:
    external: true

我們先來玩一下一個簡單範例,上面的範例就是用vs code跟參考官方範例寫成的。

後面我會花一點時間整理docker compose文件的結構跟語法的特色。

這邊試著run看看

docker-compose -f docker-compose.yaml -p ubuntutest up

官方文件有說明,external代表是在不在這邊管network物件,所以如果outside這個物件沒有先建立好,這邊會出現錯誤

我們先把network物件outside建立起來看看

docker network create outsude

再執行一次

docker-compose -f docker-compose.yaml -p ubuntutest up

ok了

我們看一下internal跟external的差異:

docker network ls

差異很簡單,external就是要先額外建好,internal代表docker compose執行同時,會建立一個project-name_network-object的網路物件。

這邊有發現一個狀況:

我重複執行了:

docker-compose -f docker-compose.yaml -p ubuntutest2 up
docker-compose -f docker-compose.yaml -p ubuntutest2 up
docker-compose -f docker-compose.yaml -p ubuntutest2 up

還是只有一個container在運作,相同container name。

這跟使用docker run --name這種方式不同,我整理如下:

  1. docker run --name NAME,NAME是容器名稱,不可重複。
  2. docker-compose up -p projectname,projectname-servicename-1為容器名稱,多次執行會不斷重啟container。

特別狀況

剛剛只展示將project都寫一樣,執行時就會不斷重啟,但如果我進入compose yaml修改service name,但project name一樣,舊的service name的container會造成以下訊息:

可以看到多次執行會出現
WARN[0000] Found orphan containers ([ubuntutest2-ubuntu-1]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.

如果確定舊的service不要使用了,可以照它的指示移除孤兒container

docker-compose -f docker-compose.yaml -p ubuntutest2 up --remove-orphans

後面會再更深入做docker compose生命週期的管理,然後會建議怎樣改service name或project name,或是使用docker-compose up /down來做重新deploy,不過我們還是著重在network的管理上喔。


上一篇
Docker的網路-Dockerfile的寫法
下一篇
Docker的網路-Docker Compose yaml的寫法(Services top-level element network篇)
系列文
搞定Docker網路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言